using Microsoft.VisualStudio.Debugger.Interop;

namespace Microsoft.WowAddonStudio.Lua.RuntimeService.DebugEngine
{
    /// <summary>
    /// This interface represents a parsed expression ready to be evaluated.
    /// </summary>
    public class LuaDebugParsedExpression : IDebugParsedExpression
    {
        #region IDebugParsedExpression Members

        /// <summary>
        /// This method evaluates the parsed expression and optionally casts the result to another data type.
        /// </summary>
        /// <param name="dwEvalFlags">A combination of EVALFLAGS constants that control how the expression is to be evaluated.</param>
        /// <param name="dwTimeout">Specifies the maximum time, in milliseconds, to wait before returning from this method. Use INFINITE to wait indefinitely.</param>
        /// <param name="pSymbolProvider">The symbol provider, expressed as an IDebugSymbolProvider interface.</param>
        /// <param name="pAddress">The current execution location within a method, expressed as an IDebugAddress interface.</param>
        /// <param name="pBinder">The binder, expressed as an IDebugBinder interface.</param>
        /// <param name="bstrResultType">The type the result should be cast to. This argument can be a null value.</param>
        /// <param name="ppResult">Returns the IDebugProperty2 interface that represents the results of evaluation.</param>
        /// <remarks>The expression evaluation context is given by pAddress, which makes it possible to determine the containing method and then use language scoping rules to determine the value of the symbols in the expression.</remarks>
        /// <returns>If successful, returns S_OK; otherwise, returns an error code.</returns>
        public int EvaluateSync(uint dwEvalFlags, uint dwTimeout, IDebugSymbolProvider pSymbolProvider,
                                IDebugAddress pAddress, IDebugBinder pBinder, string bstrResultType,
                                out IDebugProperty2 ppResult)
        {
            throw new System.NotImplementedException();
        }

        #endregion
    }
}